﻿#ifndef UTIL_H
#define UTIL_H

#include "buffer.h"
#include <string>
#include <vector>


class Util
{
public:
    // 字符串分割函数
    static size_t split(const std::string &src, const std::string &sep, std::vector<std::string> *ans, bool _reserve_blank = false);
    // 读取文件内容
    static bool readFile(const std::string &filename, Buffer *buf);
    // 写入文件
    static bool writeFile(const std::string &filename, const std::string &src);
    // URL编码，避免URL中资源路径与查询字符串中的特殊字符与HTTP请求中特殊字符产生歧义
    // 编码格式：将特殊字符的ascii值，转换为两个16进制字符，前缀%   C++ -> C%2B%2B
    // 不编码的特殊字符： RFC3986文档规定 . - _ ~ 字母，数字属于绝对不编码字符
    // RFC3986文档规定，编码格式 %HH
    // W3C标准中规定，查询字符串中的空格，需要编码为+， 解码则是+转空格
    static std::string urlEncode(const std::string &url, bool space_to_plus = true);
    // URL解码
    static std::string urlDecode(const std::string &url, bool plus_to_space = true);
    // 获取响应状态码的描述信息
    static std::string statuDes(int statucode);
    // 根据文件后缀名获取文件mime
    static std::string mimeDes(const std::string &filename);
    // 判断是否是目录
    static bool isDirectory(const std::string &filename);
    // 判断是否是普通文件
    static bool isRegular(const std::string &filename);
    // 判断路径是否有效
    static bool validPath(const std::string &path);
};

#endif